In today's highly networked computer environments, distributed computing is critical because it allows the resources of relatively small computers to be combined to provide a more powerful overall system. Distributed computing allows data and programs to be spread out, or distributed, across networks of heterogeneous computers, in a manner that is transparent to the user. Thus, data that is too large to fit on a single computer may be broken into smaller pieces and stored on several computers, or processes that service a high volume of users may be "duplicated" on many computers to reduce traffic on a single machine.
Most networks utilize a client-server model. Generally speaking, a client is a computer system or process that requests a service of another computer system or process (i.e., a server). A server is the software or system responsible for making local documents, files or processes available to clients. For example, a workstation requesting the contents of a file from a file server is a client of that file server. There are numerous network configurations, such as local area networks (LANs), which may include small intranets, and wide area networks (WANs), which may include the Internet or large intranets. Communicating and data transferring amongst clients and servers within a network is regulated by various protocols. For example, TCP/IP, which stands for Transmission Control Protocol over Internet Protocol, provides the "connectivity" rules for systems on the Internet. HTTP, which stands for HyperText Transmission Protocol, is a data transfer protocol used by the World Wide Web (WWW) that sits on top of TCP/IP.
In distributed computing, clients traditionally identify servers by name, using a "name server" to map between the name and a currently active communications address for the server process. For example, the Internet utilizes the domain name system (DNS) to map from a domain name for a machine (e.g., abc.xyz.com) to an Internet Protocol (IP) address. Unfortunately, the name server approach suffers from various weaknesses that exist both on the Internet and on smaller networks. First, the mapping between the name by which the client knows the server and the process that implements the server is typically one-to-one. That is, only one server can service the client when a server name is requested by the client. Second, the communication address of the server cannot be changed without changing at least some of the clients. Thus, if a server is overloaded, it is not straightforward to divide its responsibility among two machines without modifying some of the clients. Third, the client must pay the overhead of contacting the name server each time the client executes. That is, it cannot directly code the address of the server. Fourth, under many networking systems, the physical address of a server process can change each time a server starts to execute (e.g., after recovering from a machine failure), invalidating any physical addresses previously obtained by a client for a naming server.
While there have been numerous attempts made to provide improved load balancing on computer networks, none address all of the above-mentioned problems. For example, distributed computing, or load balancing, on the Internet is typically done at the name server level by mapping a single machine name to multiple IP addresses. Each time a domain name is looked up by the name server (DNS), a different IP address can be returned in a round-robin fashion, thereby allowing a limited form of load balancing among a set of functionally identical machines all having the same DNS name. This system also supports coalescing of multiple machine names to have a single IP address. DNS is limited in that it supports load balancing only in a round-robin fashion and requires the servers to be homogeneous. In particular, it does not allow partitioning of data (e.g., a set of very large files containing movies among a set of servers). Moreover, because the load balancing is done at the level of requests to the name server, and given the heavy use of caching in DNS (i.e., clients "remember" or store IP addresses if recently used to avoid future look-ups), the possibility of unbalanced loads is substantial.
Another known method of performing load balancing on computer networks involves the use of TCP/IP routers which allow a front end node or gateway to direct communications to one or more homogeneous back end nodes. Thus, all communications with the cluster are addressed to a single computer, and all communications with the back end nodes are transparent to the user. U.S. Pat. No. 5,371,852, issued to Attanasio et al. on Dec. 6, 1994 and assigned to IBM Corp. discloses such a system and method. In particular, the system includes a message switch for changing the information in the message header based upon a specific routing function that is selected using port and protocol information in port type messages. Unfortunately, this system is limited because, among other things, the nodes within the cluster must be homogeneous and located proximate to each other.
Load balancing is of critical importance on the World Wide Web (hereinafter, the "Web"), where explosive growth has, and will continue to occur. The Web is a distributed information system comprising a network of computers located throughout the world that communicate using the Internet. The Web allows users to create, browse or edit hypertext documents in massive client-server environment. Two primary components of the Web are Web Browsers (i.e., the software, associated with the client, designed to browse the Web), and Web Pages (i.e., the documents or processes, associated with the server, available via the Web Browsers). Each Web Page has a specific Web address known as a Uniform Resource Locator (URL). URL's provide not only the location of a file in a directory on a particular machine, but can also point to some other type of service and then further determine how the file/service is to be served. However, because URL's include a domain name, the Web is faced with the same limitations as those presented above. Namely, a name server (i.e., DNS) must be utilized, thereby limiting the ability to perform any meaningful load balancing.
Another area where improved load balancing is required is on intranet systems, which are typically used within large organizations to provide features similar to those found on the Internet. Such systems allow for efficient and varied inter-organizational communications, but are subject to the same limitations as those mentioned above.
Thus, without a better way of load balancing, performance of computer networks will be impaired. All of the above references are hereby incorporated by reference.